A wide variety of synchronization systems exist that synchronize data between different endpoints, such as between different computer systems. In some cases data that is synchronized, in at least some representations, may be associated with or subject to particular constraints. In just some examples of such constraints, a computer file system may require that a file name use only particular characters, that files in the same directory have unique names, that files be located in a directory, and so on.
To represent and enforce constraints, in some cases a synchronization system may itself be designed or extended to have knowledge of and to enforce particular constraints uniformly across all synchronization endpoints. In other cases, additional logic that operates in addition to or “on top of” a synchronization system may be provided or defined so that constraints are enforced uniformly when data is synchronized by the synchronization system.
Extending a synchronization system to enforce constraints that may be specific to or relevant only for certain types of data or particular endpoints may complicate various aspects of the synchronization system, including making it more difficult to change or update how the synchronization system operates. For example, it may be difficult or even impossible in some cases to add a new type of endpoint to an existing system of synchronization endpoints when the new endpoint requires that data conform to new constraints. Furthermore, applying constraints uniformly, so that every endpoint applies the same constraints to synchronized data, may also cause potential issues, including requiring that synchronized data be limited to perhaps lower-fidelity representations that are supported by every endpoint, even when some endpoints may be able to provide additional functionality or operate with more complex and potentially more useful representations of the same data.